package pattern3.TwoPhaseTermination.demo;

import utils.PrintUtil;

/**
 * 假设任务是把一个字符串每隔4s就打印一次, 终止的时候需要把字符串变为【任务已经结束】
 *
 * @创建人 liweijia
 * @创建时间 2022/7/23
 * @描述 程序的主要用途
 */
public class Task extends Thread {

    /**
     * 被打印的内容
     */
    private String content;

    Task(String content) {
        this.content = content;
    }

    public String getContent() {
        return content;
    }

    /**
     * 标准的工作模式，一直执行某种任务，所以使用死循环，但是需要使用sleep控制cpu消耗
     */
    @Override
    public void run() {
        while (true) {
            // 只认当前线程的打断状态
            if (Thread.currentThread().isInterrupted()) {
                PrintUtil.print("线程被打断");
                this.content = "任务已经结束";
                break;
            }
            // 控制时间防止一直消耗CPU
            try {
                Thread.sleep(4000);
                PrintUtil.print("业务逻辑：" + this.content);
            } catch (InterruptedException e) {
                PrintUtil.print("线程在睡眠中被打断");
                Thread.currentThread().interrupt();
            }
        }
    }
}
